package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.IOException;

/**
 * IO：传输数据      C/S  聊天室  Version
 * API上部分：字符串、包装类、日期类、集合
 * ----------电脑三大件：CPU   硬盘   内存
 * API下部分：IO流      ----硬盘-----文件数据传输
 *
 * 包位置：java.io
 * File文件、文件夹类
 * 作用:用于表示操作系统中系统的一个文件或者“目录：文件夹”
 * 创建File对象---->有参构造器--->”路径+文件/文件夹全称“
 *
 * File类方法使用：
 * 1.查看该文件或者”文件夹：目录“的属性信息（名字、大小、是否存在）
 * 2.操作文件或者”文件夹：目录“（创建、删除）
 * 3.访问一个”文件夹：目录“的子项
 */
public class FileAPI {
    @Test
    public void testFile() {
        //创建文件夹
        //需求：当前API下创建文件----手动---demo.txt   char r='\\'
        //File file=new File("D:\\计算机\\java-api\\API\\src\\main" +
        //     "\\java\\com\\tedu\\api\\io");
        //相对路径---当前API下创建文件！   项目：Maven结构  main编写代码
        //FileAPI.java    相当于   API  项目下-->从src开始
        //操作系统：路径  \   代表路径   文件上传到服务器
        //              /   代表路径   文件下载到本地
        //Java任何平台【操作系统】运行     统一路径属性
        //File.separator   静态属性：任何操作系统下转换为正确的路径表示方法
        File file = new File("src" + File.separator + "main" +
                "" + File.separator + "java" +
                "" + File.separator + "com" +
                "" + File.separator + "tedu" +
                "" + File.separator + "api" +
                "" + File.separator + "io" +
                "" + File.separator + "demo.txt");
        //判断文件是否存在的方法
        boolean b = file.exists();
        System.out.println("判断文件是否存在：" + b);
    }

    /**
     * 查看该文件或者”文件夹：目录“的属性信息
     * getName（）  返回值：string
     * 作用：获取文件的名字【注意：不看路径是否对错】
     * length（）  返回值：long
     * 作用：返回当前字节大小【字节量】
     * exists（）  返回值boolean
     * 作用：判断文件是否存在
     */
    @Test
    public void testFileGL() throws IOException {
        //创建文件夹---路径：Maven项目--相对路径
        //相对路径：  ./  当前API项目下
        File file = new File("." + File.separator + "demo.txt");
        //打印file  的路径
        System.out.println("打印file路径：" + file.getAbsolutePath());
        //文件是否存在
        System.out.println("路径文件是否存在：" + file.exists());
        //获取文件/文件夹名字
        String name = file.getName();
        System.out.println("文件或者文件夹的名字：" + name);
        //获取文件的的”大小，字节量“
        long len = file.length();
        System.out.println("获取文件大小【字节量】" + len);
    }

    /**
     * 使用代码完成文件或者目录自动创建
     * createNewFile（）
     * 作用：创建一个新文件
     * 需求：使用代码完成  API 项目文件夹下  自动创建 test.txt 文件
     */
    @Test
    public void testCreate() throws IOException {
        //
        File file = new File("." +
                "" + File.separator + "test.txt");
        //判断---如果文件不存在  false---创建
        //        如果文件存在  不创建
        if (!file.exists()) {
            System.out.println("文件不存在~~");
            file.createNewFile();
            System.out.println("文件已经创建");
        }else {
            System.out.println("文件存在别创建了");
        }
    }

    /**
     * delete（）
     * 作用：删除文件或者文件夹
     * 需求：将API项目下的  test.txt删除
     */
    @Test
    public void testDelete(){
        //创建File类       路径：  ./test.txt   ./不写代表  当前API项目
        File file=new File("test.txt");
        //判断  如果文件   存在--->删除
        //               不存在-->删除
        if (file.exists()){
            System.out.println("文件存在");
            file.delete();
            System.out.println("文件删除~~");
        }else {
            System.out.println("文件已经删除啦~~");
        }

    }

    /**
     * mkdir()
     * 作用:创建一个文件夹
     * 需求：在API  项目下   创建一个文件夹  demo
     *
     * 多层文件夹：demo/abc/bcd
     * mkdirs()
     * 作用：创建多层文件夹
     */
    @Test
    public void testMkdir(){
        //创建File文件/文件夹--->创建demo文件夹  /abc  /bcd
        File file=new File("demo" +
                ""+File.separator+"abc" +
                ""+File.separator+"bcd");
        //判断  如果文件   不存在--->删除
        //               存在-->删除
        if (!file.exists()){
            System.out.println("文件不存在");
            file.mkdirs();
            System.out.println("创建文件夹");
        }else {
            System.out.println("别创建了");
        }
    }
    /**
     * 作业1：删除多层文件夹 demo/abc/bcd【不能使用递归】
     *   提示：构造器 new File（File parent，“子路径”）
     */


    @Test
    public void testHomework1(){
        //1.创建多层文件夹 demo/abc/bcd
        File parent=new File("demo");
        //构造器使用（父级路径，子级路径）：父级路径/子级路径
        File child1=new File(parent,"abc");
        File child2=new File(child1,"bcd");

        child2.delete();
        child1.delete();
        parent.delete();
    }
    /**
     * 访问文件夹--->所有子项【文件和文件夹】
     * list Files（）      返回值：File【】  文件数组
     * 作用：
     */
    @Test
    public void testListFiles() throws  IOException{
        File file=new File("."+File.separator);
        System.out.println(file.getAbsolutePath());
        //
        if (file.isDirectory()){

            file.listFiles();
        }
    }
}